# -*- coding: utf-8 -*-
# Generación de documentación en html y fichero de texto del proyecto.

## vipera, un diseñador de aplicaciones para Python
##     Copyright (C) 2011 Ángel Luis García García
##
##    This program is free software: you can redistribute it and/or modify
##    it under the terms of the GNU General Public License as published by
##    the Free Software Foundation, either version 3 of the License, or
##    (at your option) any later version.
##
##    This program is distributed in the hope that it will be useful,
##    but WITHOUT ANY WARRANTY; without even the implied warranty of
##    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
##    GNU General Public License for more details.
##
##    You should have received a copy of the GNU General Public License
##    along with this program.  If not, see <http://www.gnu.org/licenses/>.

import codecs
import os
import StringIO

from configuracion_vipera import proy_por_defecto, enter

class doc_base(object):
    '''Clase base de documentación'''
    def __init__(self, datos, salida, cabecera = True):
        '''Constructor de clase'''
        self.salida = salida
        self.datos = datos
        self.cabecera = cabecera

    def parsear_a_html(self, texto, incluir_br = True):
        '''Adecúa el texto pasado como parámetro a html'''
        # Hay que incluir la indentación.
        if texto is None or len(texto.strip()) == 0: return ''
        texto_aux = StringIO.StringIO(texto)
        nuevo_texto = ''
        for i in texto_aux:
            blancos_a_izq = len(i) - len(i.lstrip())
            i = i.replace(' ','&nbsp;', blancos_a_izq)
            i = i.replace('>','&gt;')
            i = i.replace('<','&lt;')            
            if incluir_br: nuevo_texto += '%s%s' % (i, ' </br>')
            else: nuevo_texto += i
        return nuevo_texto

    def cabecera_html(self, titulo, nombre, version):
        '''Cabecera de documento html'''
        ret = \
u'''
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>%s</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head><body bgcolor="#f0f0f8">

<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>%s</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial">%s</font></td></tr></table>
''' % (self.parsear_a_html(titulo, False),
       self.parsear_a_html(nombre),
       self.parsear_a_html(version))
        return ret
    
    def pie_html(self):
        '''Pie de documento html'''
        ret = \
'''
</body></html>
'''
        return ret

class doc_modulos(doc_base):
    '''Documentación de módulos, especificando la salida "txt", "html"''' 
    def __init__(self, datos, salida = 'txt', cabecera = True):
        '''Constructor de clase'''
        doc_base.__init__(self, datos, salida, cabecera)
      
    def __descomponer(self, lista, opcion = 0):
        '''Parser de elementos de clase'''
        if opcion == 0:
            aux = ''
            for i in lista:
                if len(aux) == 0: aux += i[0]
                else: aux += u', %s' % i[0]
            ret = aux
        if opcion == 1:
            aux = ''
            for i in lista:
                if len(aux) == 0: aux += i
                else: aux += u'%s%s' % (enter, i)
            ret = aux
        if opcion == 2:
            aux = ''
            for i in lista:
                coment = i[2]
                if len(coment.strip()) == 0:
                    coment = ""
                else: coment = u' # %s' % coment
                valor = i[1]
                if len(valor.strip()) == 0:
                    valor = ""
                else: valor = u' = %s' % valor
                if len(aux) == 0: aux += u'%s%s%s' % (i[0], valor, coment)
                else: aux += u'%s%s%s%s' % (enter, i[0], valor, coment)
            ret = aux
        if opcion == 3:
            aux = ''
            for i in lista:
                # if i[2] == u'Si':
                if i[2]:
                    atrib = u'__%s' % i[0]
                if len(aux) == 0: aux += atrib
                else: aux += u'%s%s' % (enter, atrib)
            ret = aux
        if opcion == 4:
            aux = ''
            for i in lista:
                if len(i[1].strip()) != 0:
                    elem = u'%s = %s' % (i[0], i[1])
                else: elem = i[0]
                if len(aux) == 0: aux += elem
                else: aux += u', %s' % elem
            aux = u'(%s)' % aux
            ret = aux
        if opcion == 5:
            ret = ''
            for i in lista:
                aux = ''
                coment = i[1]
                if len(coment.strip()) == 0: coment = enter * 2
                else: coment = u'%s%s%s' % (enter, coment, enter * 2)
                lista_valor = i[2]
                for j in lista_valor:
                    if len(j[1].strip()) != 0: 
                        elem = u'%s = %s' % (j[0], j[1])
                    else: elem = j[0]
                    if len(aux) == 0: aux += elem
                    else: aux += u', %s' % elem
                # met = i[0] if i[4] == u'Si' else u'__%s' % i[0]
                met = i[0] if not i[4] else u'__%s' % i[0]                    
                ret += u'%s (%s)%s' % (met, aux, coment)
        if opcion == 6:
            ret = ''
            for i in lista:
                aux = ''
                nombre = i[0]
                lista_valor = i[2]
                for j in lista_valor:
                    if len(j[1].strip()) != 0: 
                        elem = u'%s = %s' % (j[0], j[1])
                    else: elem = j[0]
                    if len(aux) == 0: aux += elem
                    else: aux += u'%s%s' % (enter, elem)
                ret += u'%s%s%s%s%s' % (enter, nombre, enter, aux, enter)
        if opcion == 7:
            ret = ''
            for i in lista:
                aux = ''
                elem = ''
                nombre = i[0]
                lista_valor = i[1]
                for j in lista_valor:
                    elem += u'%s%s' % (j, enter)
                ret += u'%s%s%s%s' % (nombre, enter, elem, enter)
        return ret 
    
    def __clases(self, clases):
        '''Parser de clases'''
        # clases = [(nombre, hereda_de, clases_externas, comentario, constantes,
        #                  propiedades, atributos, metodos, parametros), ...]
        ret = ''
        if self.salida in ['html']:
            ret = '''\
</br>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Clases</strong></big></font></td></tr>

<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%">            
'''
        for clase in clases:
            # Formamos datos.
            nombre = clase[0] 
            if len(clase[8]) == 0: parametros = '()'
            else: parametros = self.__descomponer(clase[8], 4)
            comentario = clase[3]
            hereda_de = self.__descomponer(clase[1])
            clases_externas = clase[2]
            constantes = self.__descomponer(clase[4], 1)
            propiedades = self.__descomponer(clase[5], 2)
            atributos = self.__descomponer(clase[6], 3)
            metodos = self.__descomponer(clase[7], 5)
            if self.salida in ['txt']:
                ret += u'''
* Clase %s %s

%s

Hereda de (clases internas): %s
Hereda de (clases externas): %s

Constantes:

%s

Propiedades:

%s

Atributos:

%s

Métodos:

%s
    
''' % (nombre, parametros, comentario, hereda_de, clases_externas, 
       constantes, propiedades, atributos, metodos)    
            if self.salida in ['html']:
                ret += u'''\
<p>
</br>       
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial">class <strong>%s</strong>%s</font></td></tr>      

<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>%s</tt></td></tr>

<tr><td>&nbsp;</td>
<td width="100%%">Hereda de:<br>
<dl><dt><strong>%s</strong></dt><dd><tt>(clases internas)</tt></dd></dl>
<dl><dt><strong>%s</strong></dt><dd><tt>(clases externas)</tt></dd></dl>
<hr></br>
Constantes:<br>
<dl><dt><strong>%s</strong></dt></dl>
<hr></br>
Propiedades:<br>
<dl><dt><strong>%s</strong></dt></dl>
<hr></br>
Atributos:<br>
<dl><dt><strong>%s</strong></dt></dl>
<hr></br>
Métodos:<br>
<dl><dt><strong>%s</strong></dt></dl>
<hr></br>
</td></tr></table> 
''' % (self.parsear_a_html(nombre, False), self.parsear_a_html(parametros, False),
       self.parsear_a_html(comentario), self.parsear_a_html(hereda_de),
       self.parsear_a_html(clases_externas), self.parsear_a_html(constantes),
       self.parsear_a_html(propiedades),self.parsear_a_html(atributos),
       self.parsear_a_html(metodos))
        if self.salida in ['html']:
            # Cerramos la tabla html.
            ret += '''\
</td></tr></table>
'''
        return ret

    def __funciones(self, funciones):
        '''Parser de funciones'''
        # funciones = [(nombre, 65, comentario, pre, post, lista_param, codigo), ...]
        ret = ''
        if self.salida in ['html']:
            ret = u'''\
</br>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Funciones</strong></big></font></td></tr>

<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%">      
'''
        lista_funciones = funciones['funciones']
        for funcion in lista_funciones:
            nombre = funcion[0]
            parametros = self.__descomponer(funcion[5], 4)
            info = funcion[1]
            pre = funcion[2]
            post = funcion[3]
            if self.salida in ['txt']:
                ret += u'''\
* Función %s %s

%s

Precondición:

%s

Postcondición:

%s
    
''' % (nombre, parametros, info, pre, post)    
            if self.salida in ['html']:
                ret += u'''\
<p>
<dd><dt><strong>%s</strong>%s</dt></dd>
<dd><tt>%s</tt></dd>
</br>
Precondición:</br>
<dd><tt>%s</tt></dd>
</br>
Postcondición:</br>
<dd><tt>%s</tt></dd>
<hr>
''' % (self.parsear_a_html(nombre, False), self.parsear_a_html(parametros, False),
       self.parsear_a_html(info),self.parsear_a_html(pre),self.parsear_a_html(post))
        if self.salida in ['html']:
            ret += u'''\
</td></tr></table>
'''
        return ret

    def __documentacion(self, documentacion):
        '''Parser de documentación'''
        nombre = documentacion['nombre']
        proposito = documentacion['proposito']
        autor = documentacion['autor']
        creado = documentacion['creado']
        CopyRight = documentacion['CopyRight']
        licencia = documentacion['licencia']
        if self.salida in ['txt']:
            ret = u'''
* Documentación:

Nombre: %s

Propósito:

%s

Autor: %s 
Fecha de creación: %s

Copyright:

%s

Licencia:

%s
    
''' % (nombre, proposito, autor, creado, CopyRight, licencia)    
        if self.salida in ['html']:
            ret = u'''\
</br>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#14E7FA">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Documentación</strong></big></font></td></tr>

<tr><td bgcolor="#14E7FA"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%">  
</br>
Nombre: <dd><tt>%s</tt></dd>
Propósito: <dd><tt>%s</tt></dd>
Autor: <dd><tt>%s</tt></dd>
Creado en: <dd><tt>%s</tt></dd>
Copyright: <dd><tt>%s</tt></dd>
Licencia: <dd><tt>%s</tt></dd>
</td></tr></table>
''' % (self.parsear_a_html(nombre), self.parsear_a_html(proposito),
       self.parsear_a_html(autor), self.parsear_a_html(creado),
       self.parsear_a_html(CopyRight), self.parsear_a_html(licencia))
        return ret

    def __imports(self, imports):
        '''Parser de imports'''
        Import = self.__descomponer(imports['import'], 1)
        Import_from = self.__descomponer(imports['import_from'], 1)
        if self.salida in ['txt']:
            ret = u'''
* Módulos a importar:

%s
%s

''' % (Import, Import_from)    
        if self.salida in ['html']:
            ret = u'''\
</br>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#21FA14">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Imports</strong></big></font></td></tr>

<tr><td bgcolor="#21FA14"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%">  
</br>
%s
%s
</td></tr></table>
''' % (self.parsear_a_html(Import), self.parsear_a_html(Import_from))
        return ret

    def __registros(self, registros):
        '''Parser de registros'''
        lista_registros = self.__descomponer(registros['lista_registros'], 6)
        if self.salida in ['txt']:
            ret = u'''
* Registros: 

%s

''' % (lista_registros)    
        if self.salida in ['html']:
            ret = u'''\
</br>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#26FB65">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Registros</strong></big></font></td></tr>

<tr><td bgcolor="#26FB65"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%">  
</br>
<strong>%s</strong>

</td></tr></table>
''' % (self.parsear_a_html(lista_registros))      
        return ret

    def __constantes(self, constantes):
        '''Parser de constantes'''
        lista_cte = self.__descomponer(constantes['lista_cte'], 1)
        lista_cte_dicc = self.__descomponer(constantes['lista_cte_dicc'], 7)
        if self.salida in ['txt']:
            ret = u'''
* Constantes: 

%s

* Diccionario de constantes: 

%s

''' % (lista_cte, lista_cte_dicc)    
        if self.salida in ['html']:
            ret = u'''\
</br>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#F8FA14">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Constantes</strong></big></font></td></tr>

<tr><td bgcolor="#F8FA14"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%">  
</br>
<strong>Constantes:</strong></br> 
<tt>%s</tt>
</br>
<strong>Diccionarios de constantes:</strong></br>
<tt>%s</tt>
</td></tr></table>
''' % (self.parsear_a_html(lista_cte), self.parsear_a_html(lista_cte_dicc))
        return ret

    def __cod_prin(self, cod_prin):
        '''Parser de código principal'''
        codigo_p = cod_prin['codigo_p']
        # print "codigo_p = "
        if self.salida in ['txt']:
            ret = u'''
* Código principal: 

%s

''' % (codigo_p)    
        if self.salida in ['html']:
            ret = u'''\
</br>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#6F7F75">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Código principal</strong></big></font></td></tr>

<tr><td bgcolor="#6F7F75"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%">  
</br>
<tt>%s</tt>
</td></tr></table>
''' % (self.parsear_a_html(codigo_p))
            
        return ret

    def __bmp_ogl(self, bmp_ogl):
        '''Parser de diagrama de clases'''
        if self.salida in ['txt']:
            ret = u'''
* Diagrama de clases: 

No disponible en modo texto.

''' 
        if self.salida in ['html']:
            aux0 = bmp_ogl.replace('\\','/')
            aux1 = 'file:///%s' % aux0
            ret = u'''\
</br>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#14E7FA">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Diagrama de clases</strong></big></font></td></tr>

<tr><td bgcolor="#14E7FA"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%">  
</br>
<img src="%s" width="1000" height="1000" alt="Diagrama de clases" />  
</td></tr></table>
''' % aux1
            
        return ret
    
    def __crear_modulos(self, modulos):
        '''Módulos del proyecto'''
        # ret_modulos = [
        # [modulo, clases, funciones, documentacion, imports, registros, constantes, cod. prin], ...]
        # donde clases = [(nombre, hereda_de, clases_externas, comentario, constantes,
        #                  propiedades, atributos, metodos), ...]
        # funciones = [(nombre, 65, comentario, pre, post, lista_param, codigo), ...]        
        # Texto.
        if self.salida in ['txt']:
            aux = ''
            for i in modulos:
                aux += u'''
#######################################                
MÓDULO %s
#######################################
''' % i[0]
                if i[1] is not None:
                    aux += self.__clases(i[1]) 
                if i[2] is not None:
                    aux += self.__funciones(i[2])
                if i[3] is not None:
                    aux += self.__documentacion(i[3])
                if i[4] is not None:
                    aux += self.__imports(i[4])
                if i[5] is not None:
                    aux += self.__registros(i[5])
                if i[6] is not None:
                    aux += self.__constantes(i[6])
                if i[7] is not None:
                    aux += self.__cod_prin(i[7])
                if i[8] is not None:
                    aux += self.__bmp_ogl(i[8])
            ret = aux
        # HTML.
        if self.salida in ['html']:
            aux = ''
            for i in modulos:
                aux += u'''\
</br>
</br>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>%s</strong></big></big></font></td
><td align=right valign=bottom
></td></tr></table>
''' % self.parsear_a_html(i[0])
                if i[1] is not None:
                    aux += self.__clases(i[1]) 
                if i[2] is not None:
                    aux += self.__funciones(i[2])
                if i[3] is not None:
                    aux += self.__documentacion(i[3])
                if i[4] is not None:
                    aux += self.__imports(i[4])
                if i[5] is not None:
                    aux += self.__registros(i[5])
                if i[6] is not None:
                    aux += self.__constantes(i[6])
                if i[7] is not None:
                    aux += self.__cod_prin(i[7])
                if i[8] is not None:
                    aux += self.__bmp_ogl(i[8])
            ret = aux
        # Devolvemos datos.
        return ret

    def devolver_texto(self):
        '''Devuelve el contenido del fichero'''
        datos = self.datos
        ret = ''
        if self.salida in ['txt']:
            if datos is not None: ret += self.__crear_modulos(datos) + enter
        if self.salida in ['html']:
            if self.cabecera:
                # Cabecera.
                nombre = titulo = u"Módulos"
                version = u'Generado por vipera'
                ret += self.cabecera_html(titulo, nombre, version)
            # Demás datos.
            if datos is not None: ret += self.__crear_modulos(datos) + enter
        return ret
  
class doc_packages(doc_base):
    '''Documentación de packages, especificando la salida "txt", "html"''' 
    def __init__(self, datos, salida = 'txt', cabecera = True):
        '''Constructor de clase'''
        doc_base.__init__(self, datos, salida, cabecera)
        
    def __crear_package(self, arbol_packages):
        '''Árbol de package del proyecto'''
        # Texto.
        if self.salida in ['txt']:
            ret = \
u'''
Árbol de packages:
------------------

%s

''' % arbol_packages
        # Html.
        if self.salida in ['html']:
            ret = \
u'''
<p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Árbol de packages</strong></big></font></td></tr>
    
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%"><dl><dt><a name="arbol_packages"><strong>%s</strong></dt><dd><tt><br>
</tt></dd></dl>
</td></tr></table>
''' % self.parsear_a_html(arbol_packages)
        # Devolvemos.
        return ret

    def devolver_texto(self):
        '''Devuelve el contenido del fichero'''
        datos = self.datos
        ret = ''
        if self.salida in ['txt']:
            if datos is not None: ret += self.__crear_package(datos) + enter
        if self.salida in ['html']:
            if self.cabecera:
                # Cabecera.
                nombre = titulo = u"Árbol de packages"
                version = u'Generado por vipera'
                ret += self.cabecera_html(titulo, nombre, version)
            # Demás datos.
            if datos is not None: ret += self.__crear_package(datos) + enter
            # Pie.
            # ret += self.pie_html()
        return ret
    
class doc_proyecto(doc_base):
    '''Documentación de proyecto, especificando la salida "txt", "html"''' 
    def __init__(self, datos, salida = 'txt'):
        '''Constructor de clase'''
        doc_base.__init__(self, datos, salida)
        
    def __crear_definicion(self, definicion):
        '''Se construye la definición'''
        # Datos.
        nombre = definicion[0]
        version = definicion[1]
        fecha_creacion = definicion[2]
        nick = definicion[3]
        desarrollador = definicion[4]
        grupo = definicion[5]
        # Texto.
        if self.salida in ['txt']:
            ret = \
u'''
Definición de proyecto:
-----------------------

     Título: %s    
     
          Versión: %s                               
 
          Fecha de creación: %s                        

     Desarrollador: %s

          Nick: %s    
          
          Grupo: %s

''' % (nombre, version, fecha_creacion, desarrollador, nick, grupo)
        # html.
        if self.salida in ['html']:
            ret = \
u'''
<p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Definición</strong></big></font></td></tr>
    
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%"><dl>
<dt><font face="helvetica, arial"><strong>Nombre del proyecto: </strong>%s</font></dt><dd>
</dd>
</dl>

<dl>
<dt><font face="helvetica, arial"><strong>Versión: </strong>%s</font></dt><dd>
</dd>
</dl>

<dl> 
<dt><font face="helvetica, arial"><strong>Fecha de creación: </strong>%s</font></dt><dd>
</dd>
</dl>

 <p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><strong>Autor</strong></font></td></tr>
    

<td width="100%%"><br>
<dl><dt><a name="desarrollador"><strong>Desarrollador: </strong>%s</a></dt><dd><tt></tt></dd></dl>
<dl><dt><a name="nick"><strong>Nick: </strong></a>%s</dt><dd><tt></tt></dd></dl>
<dl><dt><a name="grupo"><strong>Grupo: </strong></a>%s</dt><dd><tt></tt></dd></dl>
</td></tr></table></td></tr></table>
''' % (self.parsear_a_html(nombre), 
       self.parsear_a_html(version),
       self.parsear_a_html(fecha_creacion),
       self.parsear_a_html(desarrollador),
       self.parsear_a_html(nick),
       self.parsear_a_html(grupo))
        # Se devuelve el texto.
        return ret
        
    def __crear_objetivo(self, objetivo):
        '''Se construye el objetivo'''
        # Texto.
        if self.salida in ['txt']:
            ret = \
u'''
Objetivo:
---------

%s

''' % objetivo
        if self.salida in ['html']:
            ret = \
u'''
<p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Objetivo</strong></big></font></td></tr>
    
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%"><dl><dt><a name="objetivo"><strong>%s</strong></dt><dd><tt><br>
</tt></dd></dl>
</td></tr></table>
''' % self.parsear_a_html(objetivo)
        # Se devuelve el texto.
        return ret

    def __crear_notas(self, notas):
        '''Se construyen las notas'''
        # Texto.
        if self.salida in ['txt']:
            ret = \
u'''
Notas:
------

%s

''' % notas
        if self.salida in ['html']:
            ret = \
u'''
<p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#14E7FA">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Notas</strong></big></font></td></tr>
    
<tr><td bgcolor="#14E7FA"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%"><dl><dt><strong>%s</strong></dt><dd><tt><br>
</tt></dd></dl>
</td></tr></table>
''' % self.parsear_a_html(notas)
        # Se devuelve el texto.
        return ret

    def __crear_HISTORY(self, historial):
        '''Se construyen el historial'''
        # Texto.
        if self.salida in ['txt']:
            ret = \
u'''
Historial:
----------

%s

''' % historial
        # Html.
        if self.salida in ['html']:
            ret = \
u'''
<p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#F8FA14">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>HISTORIAL</strong></big></font></td></tr>
    
<tr><td bgcolor="#F8FA14"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%"><dl><dt><strong>%s</strong></dt><dd><tt><br>
</tt></dd></dl>
</td></tr></table>
''' % self.parsear_a_html(historial)
        # Se devuelve el texto.
        return ret
            
    def __crear_README(self, readme):
        '''Se construye el readme'''
        # Texto.
        if self.salida in ['txt']:
            ret = \
u'''
README:
-------

%s

''' % readme
        # HTML.
        if self.salida in ['html']:
            ret = \
u'''
<p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#6F7F75">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>README</strong></big></font></td></tr>
    
<tr><td bgcolor="#6F7F75"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%"><dl><dt><strong>%s</strong></dt><dd><tt><br>
</tt></dd></dl>
</td></tr></table>
''' % self.parsear_a_html(readme)
        # Se devuelve el texto.
        return ret

    def __crear_LICENSE(self, licencia):
        '''Se construyen las licencias'''
        # Texto.
        if self.salida in ['txt']:
            ret = \
u'''
Licencia:
---------

%s

''' % licencia
        # Html.
        if self.salida in ['html']:
            ret = \
u'''
<p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#21FA14">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>LICENCIA</strong></big></font></td></tr>
    
<tr><td bgcolor="#21FA14"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%"><dl><dt><strong>%s</strong></dt><dd><tt><br>
</tt></dd></dl>
</td></tr></table>
''' % self.parsear_a_html(licencia)
        # Se devuelve el texto.
        return ret

    def __crear_avatar(self, avatar):
        '''Se construye avatar'''
        # Texto.
        if self.salida in ['txt']:
            ret = \
u'''
Avatar:
-------
  No disponible en modo texto

''' 
        # html.
        if self.salida in ['html']:
            # Creamos ruta para página web.
            aux0 = avatar.replace('\\','/')
            aux1 = 'file:///%s' % aux0
            ret = \
'''
<br>
<img src="%s" width="100" height="100" alt="Avatar" />  
''' % aux1
        # Se devuelve el texto.
        return ret
    
    
    def devolver_texto(self):
        '''Devuelve el contenido del fichero'''
        datos = self.datos
        ret = ''
        if self.salida in ['txt']:
            if datos[0] is not None: ret += self.__crear_definicion(datos[0]) + enter
            if datos[4] is not None: ret += self.__crear_objetivo(datos[4]) + enter
            if datos[5] is not None: ret += self.__crear_notas(datos[5]) + enter
            if datos[1] is not None: ret += self.__crear_README(datos[1]) + enter
            if datos[2] is not None: ret += self.__crear_HISTORY(datos[2]) + enter
            if datos[3] is not None: ret += self.__crear_LICENSE(datos[3]) + enter
            if datos[6] is not None: ret += self.__crear_avatar(datos[6]) + enter
        if self.salida in ['html']:
            # Cabecera.
            nombre = version = ''
            titulo = u'Generado por vipera'
            if datos[0] is not None: 
                if len(datos[0][0]) != 0:
                    nombre = 'Proyecto %s ' % datos[0][0]
                    titulo = u'vipera: Proyecto %s' % datos[0][0]
                if len(datos[0][1]) != 0:               
                    version = u'versión %s' % datos[0][1]
            ret += self.cabecera_html(titulo, nombre, version)
            # Demás datos.
            if datos[6] is not None: ret += self.__crear_avatar(datos[6]) + enter
            if datos[0] is not None: ret += self.__crear_definicion(datos[0]) + enter
            if datos[4] is not None: ret += self.__crear_objetivo(datos[4]) + enter
            if datos[5] is not None: ret += self.__crear_notas(datos[5]) + enter
            if datos[1] is not None: ret += self.__crear_README(datos[1]) + enter
            if datos[2] is not None: ret += self.__crear_HISTORY(datos[2]) + enter
            if datos[3] is not None: ret += self.__crear_LICENSE(datos[3]) + enter
            # Pie.
            # ret += self.pie_html()
        return ret
    
    